package com.ingenio.dao;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.ingenio.Adapter;
import com.ingenio.business.Almacen;
import com.ingenio.business.EstadoAlmacen;
import com.ingenio.business.Sucursal;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

public class AlmacenAdapter extends Adapter{
	
	public void agregarAlmacen(Almacen almacen) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
		try {
	    	conn = (Connection) abrirConexion();
	    	
			String add ="INSERT into almacen (descAlmacen, IdEstadoAlmacen, IdSucursal, almHabilitado) " +
					"VALUES (?, ?, ?, 1)";
			stmt = (PreparedStatement) conn.prepareStatement(add);
			stmt.setString(1, almacen.getDescripcion());
			stmt.setInt(2, almacen.getEstadoAlmacen().getIdEstadoAlmacen());
			stmt.setInt(3, almacen.getSucursal().getIdSucursal());
			stmt.execute();
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
	}
	
	public void eliminarAlmacen(Almacen almacen) throws Exception{
    	Connection conn = null;
    	PreparedStatement stmt = null;
    	try {
	    	conn = (Connection) abrirConexion();
	    	String del ="UPDATE almacen SET almHabilitado = 0 WHERE IdAlmacen = ?";
			stmt = (PreparedStatement) conn.prepareStatement(del);
			stmt.setInt(1, almacen.getIdAlmacen());
			stmt.execute();
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
    }
	
	public void modificarAlmacen(Almacen almacen) throws Exception{
    	Connection conn = null;
    	PreparedStatement stmt = null;
    	try {
	    	conn = (Connection) abrirConexion();
	    	
	    	String upd ="UPDATE almacen SET descAlmacen = ?, IdEstadoAlmacen = ? WHERE IdAlmacen = ?";
			stmt = (PreparedStatement) conn.prepareStatement(upd);
	    	stmt.setString(1, almacen.getDescripcion());
	    	stmt.setInt(2, almacen.getEstadoAlmacen().getIdEstadoAlmacen());
	    	stmt.setInt(3, almacen.getIdAlmacen());
			stmt.executeUpdate();
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
    }
	
	public Almacen devolverAlmacen(Integer id) throws Exception{
    	Connection conn = null;
    	Almacen a = null;
    	PreparedStatement stmt = null;
    	try {
    		conn = (Connection) abrirConexion();
    		String sel ="SELECT descAlmacen as descripcion, IdEstadoAlmacen, IdSucursal  FROM almacen WHERE IdAlmacen =  ? and almHabilitado = 1";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		stmt.setInt(1, id);
    		ResultSet result = stmt.executeQuery();
    		EstadoAlmacenAdapter eaa = new EstadoAlmacenAdapter();
    		SucursalAdapter sa = new SucursalAdapter();
    		Sucursal s = null;
    		EstadoAlmacen ea = null;
    		if(result.next()){
    			String descripcion = result.getString("descripcion");
    			Integer idEstadoAlmacen = result.getInt("IdEstadoAlmacen");
    			Integer idSucursal = result.getInt("IdSucursal");
    			s = sa.devolverSucursal(idSucursal);
    			ea = eaa.devolverEstadoAlmacen(idEstadoAlmacen);
    			a = new Almacen(id, descripcion, ea, s, true);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
		return a;
    }
	
	public List<Almacen> devolverTodos() throws Exception{
    	Connection conn = null;
    	List<Almacen> almacenes = new ArrayList<Almacen>();
    	PreparedStatement stmt = null;
		try {
			conn = (Connection) abrirConexion();
    		SucursalAdapter sa = new SucursalAdapter();
    		EstadoAlmacenAdapter eaa = new EstadoAlmacenAdapter();
			Almacen a = null;
			Sucursal s = null;
			EstadoAlmacen ea = null;
    		String sel = "SELECT IdAlmacen, descAlmacen as descripcion, IdEstadoAlmacen, IdSucursal FROM almacen WHERE almHabilitado = 1";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		ResultSet result = stmt.executeQuery();
    		while(result.next()){
    			Integer idAlmacen = result.getInt("IdAlmacen");
    			String descripcion = result.getString("descripcion");
    			Integer idEstadoAlmacen = result.getInt("IdEstadoAlmacen");
    			Integer idSucursal = result.getInt("IdSucursal");
    			s = sa.devolverSucursal(idSucursal);
    			ea = eaa.devolverEstadoAlmacen(idEstadoAlmacen);
    			a = new Almacen(idAlmacen, descripcion, ea, s, true);
    			almacenes.add(a);
    		}
		}
		catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
    	return almacenes;
    }
	
}
